package com.itlong.cloud.commons.dao;

import com.itlong.cloud.POJO.DTO.property.DeviceMediaBindDTO;
import com.itlong.cloud.POJO.PO.DeviceCloudIntercomInfoPO;
import com.itlong.cloud.POJO.PO.DevicePadInfoPO;
import com.itlong.cloud.POJO.VO.app.AppUserFaceVO;
import com.itlong.cloud.POJO.VO.operate.OperateFaceApplyInfoVO;
import com.itlong.cloud.POJO.VO.property.CloudControllerVO;
import com.itlong.cloud.POJO.VO.property.VisitorFaceInfoVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <desc>
 *       IOT服务层,公共数据交互类
 *       IOT服务层数据交互内容较少可都放入这个类里边
 * </desc>
 *
 * @createDate 2018/08/23
 */
@Mapper
@Repository
public interface ICommonsDao{

    /**
     * <desc>
     *      标准添加
     * </desc>
     * @param  params 云对讲设备更新信息
     * @return Integer
     * @author Qiang.S
     * @createDate 2018/08/23
     */
    Integer save(Map<String,Object> params);

    /**
     * <desc>
     *      标准更新
     * </desc>
     * @param  params 云对讲设备更新信息
     * @return Integer
     * @author Qiang.S
     * @createDate 2018/08/23
     */
    Integer update(Map<String,Object> params);

    /**
     * <desc>
     *      批量保存围墙机信息
     * </desc>
     *
     * @param params 待保存的多媒体资源-围墙机信息
     * @return 受影响的行数
     * @author wangzhi
     * @createDate 2018/11/22
     */
    Integer batchSaveWall(List<Map<String, Object>> params);

    /**
     * <desc>
     *      批量保存门口机信息
     * </desc>
     *
     * @param params 待保存的多媒体资源-门口机信息
     * @return 受影响的行数
     * @author wangzhi
     * @createDate 2018/11/22
     */
    Integer batchSaveGate(List<Map<String, Object>> params);

    /**
     * <desc>
     *      物理删除指定门口机多媒体服务信息【根据多媒体Id】
     * </desc>
     *
     * @param  mediaId 多媒体Id
     * @return 受影响的行数
     * @author wangzhi
     * @createDate 2018/11/22
     */
    Integer removeGate(@Param("mediaId") String mediaId);

    /**
     * <desc>
     *      物理删除指定围墙机多媒体服务信息【根据多媒体Id】
     * </desc>
     *
     * @param  mediaId 多媒体Id
     * @return 受影响的行数
     * @author wangzhi
     * @createDate 2018/11/22
     */
    Integer removeWall(@Param("mediaId") String mediaId);

    /**
     * <desc>
     *     获取过期访客百度中的人脸
     * <desc/>
     *
     *@param
     * @return
     * @author Qiang.S
     * @createDate 2019/03/01
     */
    List<VisitorFaceInfoVO> getExpiredFaceId();

    /**
     * <desc>
     *      根据项目ID获取单个应用信息。
     * <desc/>
     *
     * @param  projectId  项目编号
     * @return
     * @author Qiang.S
     * @createDate 2019-03-04
     */
    OperateFaceApplyInfoVO getFaceByProjectId(String projectId);

    /**
     * <desc>
     *      根据项目ID获取单个应用信息。
     * <desc/>
     *
     * @param  vFaceId  访客百度人脸编号
     * @return
     * @author Qiang.S
     * @createDate 2019-03-04
     */
    Integer updateVisitorFaceFlag(String vFaceId);

    /**
     * <desc>
     *      获取用户有效项目id列表
     * </desc>
     *
     * @param userId
     * @return
     * @author Jiaqi.X
     * @createDate 2020/06/17
     */
    List<String> getProjectsByUserId(@Param("userId") String userId);

    /**
     * <desc>
     *      删除用户人脸  人脸识别api
     * <desc/>
     *
     * @param userId 用户编号
     * @param projectId 项目编号
     * @return
     * @author Qiang.S
     * @createDate 2019/11/05
     */
    Integer updateUserFaceFlag(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     *      查询所有云对讲。
     * <desc/>
     *
     * @return
     * @author Qiang.S
     * @createDate 2019-07-04
     */
    List<CloudControllerVO> getAllIntercom();

    /**
     * <desc>
     *      查询所有云电梯。
     * <desc/>
     *
     * @return
     * @author Qiang.S
     * @createDate 2019-07-04
     */
    List<CloudControllerVO> getAllElevator();

    /**
     * <desc>
     *      查询所有云门禁。
     * <desc/>
     *
     * @return
     * @author Qiang.S
     * @createDate 2019-07-04
     */
    List<CloudControllerVO> getAllEntrance();

    /**
     * <desc>
     *      查询所有群控器。
     * <desc/>
     *
     * @return
     * @author Qiang.S
     * @createDate 2019-07-04
     */
    List<CloudControllerVO> getAllController();

    /**
     * <desc>
     *      查询所有联动器。
     * <desc/>
     *
     * @return
     * @author Qiang.S
     * @createDate 2019-07-04
     */
    List<CloudControllerVO> getAllCluster();

    /**
     * <desc>
     *      查询所有平板。
     * <desc/>
     *
     * @return
     * @author Qiang.S
     * @createDate 2019-07-04
     */
    List<CloudControllerVO> getAllPad();

    /**
     * <desc>
     *      查询所有一卡通。
     * <desc/>
     *
     * @return
     * @author Qiang.S
     * @createDate 2019-07-04
     */
    List<CloudControllerVO> getAllSmartCard();

    /**
     * <desc>
     *      查询所有一体式人脸识别门禁。
     * <desc/>
     *
     * @return
     * @author Qiang.S
     * @createDate 2020-05-22
     */
    List<CloudControllerVO> getUnibodyFace();

    /**
     * <desc>
     *      更新平板iot信息。
     * <desc/>
     *
     * @param po
     * @return
     * @author Qiang.S
     * @createDate 2019-07-09
     */
    Integer updatePadIotInfoByDeviceUnique(DevicePadInfoPO po);

    /**
     * <desc>
     *      更新云对讲iot信息。
     * <desc/>
     *
     * @param po
     * @return
     * @author Qiang.S
     * @createDate 2019-07-16
     */
    Integer updateTalkIotInfoByDeviceUnique(DeviceCloudIntercomInfoPO po);

    /**
     * <desc>
     *      更新云对讲iot信息。
     * <desc/>
     *
     * @param deviceUnique 设备编号
     * @param iotDeviceId 阿里云颁发的设备id，全局唯一
     * @param iotDeviceSecret 设备私钥
     * @return
     * @author Qiang.S
     * @createDate 2019-07-25
     */
    Integer updateSmartCardIotInfo(@Param("deviceUnique")String deviceUnique, @Param("iotDeviceId")String iotDeviceId,
                                            @Param("iotDeviceSecret")String iotDeviceSecret);

    /**
     * <desc>
     *      根据名称查询结果
     * <desc/>
     *
     * @param updateName 文件名称
     * @return
     * @author Qiang.S
     * @createDate 2018-08-23
     */
    String getUpdateInfoByName(String updateName);

    /**
     * <desc>
     *      获取用户人脸创建信息
     * </desc>
     *
     * @param userId 用户id
     * @param projectId 项目id
     * @return
     * @author Qiang.S
     * @createDate 2018/05/08
     */
    AppUserFaceVO getCreateBaiduFaceInfo(@Param("userId") String userId, @Param("projectId") String projectId);


    /**
     * <desc>
     *      查询HW iot所有云电梯
     * <desc/>
     *
     * @return
     * @author caoshuai
     * @createDate 2020/09/25
     * @param projectIds
     */
    List<CloudControllerVO> getHWIotAllElevator(@Param("projectIds") Set<String> projectIds);

    /**
     * <desc>
     *      查询HW iot所有云门禁
     * <desc/>
     *
     * @return
     * @author caoshuai
     * @createDate 2020/09/25
     * @param projectIds
     */
    List<CloudControllerVO> getHWIotAllEntrance(@Param("projectIds") Set<String> projectIds);

    /**
     * <desc>
     *      查询HW iot所有云群控器
     * <desc/>
     *
     * @return
     * @author caoshuai
     * @createDate 2020/09/25
     * @param projectIds
     */
    List<CloudControllerVO> getHWIotAllController(@Param("projectIds") Set<String> projectIds);

    /**
     * <desc>
     *      获取云对讲详细信息
     * </desc>
     *
     * @param list 云对讲设备唯一码列表
     * @return 云对讲详细信息
     * @Author Zhu.yj
     * @createDate  2020/10/20
     */
    List<DeviceMediaBindDTO> getCloudIntercomInfo(List<String> list);
}
